package net.NingXiaRuiTai.ShortChain.exception;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import net.NingXiaRuiTai.ShortChain.enums.BizCodeEnum;
import net.NingXiaRuiTai.ShortChain.utils.JsonData;
@ControllerAdvice
//@RestController
@Slf4j
/*
@ControllerAdvice：这是一个 Spring 框架的注解，用于定义一个全局的异常处理类。
当控制器（Controller）抛出异常时，Spring 会自动调用这个类中的方法来处理异常。
@RestController：这也是一个 Spring 框架的注解，用于将类标记为 RESTful Web 服务的控制器。
它是@Controller和@ResponseBody注解的组合，意味着该类的所有方法都会返回 JSON 或 XML 格式的数据，
而不是视图。
@Slf4j：这是一个 Lombok 库的注解，用于自动为类添加日志记录功能。
它会在编译时生成一个名为log的静态变量，类型为org.slf4j.Logger，可以直接在类中使用这个变量来记录日志。
总的来说，这段代码的作用是创建一个能够处理全局异常的 RESTful Web 服务控制器，并且具有自动日志记录功能。
*/
public class CustomExceptionHandler {
    @ExceptionHandler(value = Exception.class)

    public JsonData handler(Exception e){
        if(e instanceof BizeException){
            BizeException ex = (BizeException)e;
            return JsonData.buildCodeAndMsg(ex.getCode(),ex.getMsg());
        }else {
            log.error("系统异常",e);
            return JsonData.buildError("系统异常");
        }
    }

}
